#!/bin/bash

# MCP Server AntD - Cursor 集成脚本
# 自动配置 Cursor IDE 集成

set -e

echo "🚀 开始配置 MCP Server AntD 与 Cursor IDE 集成..."

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 获取当前脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

echo -e "${BLUE}📁 项目根目录: ${PROJECT_ROOT}${NC}"

# 检查操作系统
detect_os() {
    case "$(uname -s)" in
        Darwin)
            echo "macOS"
            ;;
        Linux)
            echo "Linux"
            ;;
        CYGWIN*|MINGW32*|MSYS*|MINGW*)
            echo "Windows"
            ;;
        *)
            echo "Unknown"
            ;;
    esac
}

OS=$(detect_os)
echo -e "${BLUE}🖥️  检测到操作系统: ${OS}${NC}"

# 获取 Cursor 配置文件路径
get_cursor_config_path() {
    case "$OS" in
        "macOS")
            echo "$HOME/Library/Application Support/Cursor/User/settings.json"
            ;;
        "Linux")
            echo "$HOME/.config/Cursor/User/settings.json"
            ;;
        "Windows")
            echo "$APPDATA/Cursor/User/settings.json"
            ;;
        *)
            echo ""
            ;;
    esac
}

CURSOR_CONFIG_PATH=$(get_cursor_config_path)

if [ -z "$CURSOR_CONFIG_PATH" ]; then
    echo -e "${RED}❌ 无法确定 Cursor 配置文件路径${NC}"
    exit 1
fi

echo -e "${BLUE}⚙️  Cursor 配置文件路径: ${CURSOR_CONFIG_PATH}${NC}"

# 检查项目是否已构建
check_build() {
    echo -e "${YELLOW}🔍 检查项目构建状态...${NC}"
    
    if [ ! -f "$PROJECT_ROOT/build/index.js" ]; then
        echo -e "${YELLOW}⚠️  项目未构建，开始构建...${NC}"
        cd "$PROJECT_ROOT"
        npm run build
        
        if [ $? -eq 0 ]; then
            echo -e "${GREEN}✅ 项目构建成功${NC}"
        else
            echo -e "${RED}❌ 项目构建失败${NC}"
            exit 1
        fi
    else
        echo -e "${GREEN}✅ 项目已构建${NC}"
    fi
}

# 检查数据库状态
check_database() {
    echo -e "${YELLOW}🔍 检查数据库状态...${NC}"
    
    cd "$PROJECT_ROOT"
    
    # 尝试运行数据库状态检查
    if npm run db:status > /dev/null 2>&1; then
        echo -e "${GREEN}✅ 数据库连接正常${NC}"
    else
        echo -e "${RED}❌ 数据库连接失败${NC}"
        echo -e "${YELLOW}💡 请确保 MySQL 和 Redis 服务正在运行${NC}"
        echo -e "${YELLOW}💡 可以运行 'npm run db:init' 来初始化数据库${NC}"
        
        read -p "是否继续配置？(y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
}

# 备份现有配置
backup_config() {
    if [ -f "$CURSOR_CONFIG_PATH" ]; then
        echo -e "${YELLOW}📋 备份现有 Cursor 配置...${NC}"
        cp "$CURSOR_CONFIG_PATH" "${CURSOR_CONFIG_PATH}.backup.$(date +%Y%m%d_%H%M%S)"
        echo -e "${GREEN}✅ 配置已备份${NC}"
    else
        echo -e "${YELLOW}⚠️  Cursor 配置文件不存在，将创建新文件${NC}"
        mkdir -p "$(dirname "$CURSOR_CONFIG_PATH")"
    fi
}

# 生成 MCP 配置
generate_mcp_config() {
    cat << EOF
{
  "mcp.servers": {
    "mcp-server-antd": {
      "command": "node",
      "args": ["${PROJECT_ROOT}/build/index.js"],
      "env": {
        "NODE_ENV": "production",
        "USE_DATABASE": "true"
      },
      "disabled": false
    }
  }
}
EOF
}

# 合并配置到现有文件
merge_config() {
    echo -e "${YELLOW}🔧 配置 Cursor MCP 设置...${NC}"
    
    local mcp_config_file="$PROJECT_ROOT/integration/cursor-mcp-config.json"
    generate_mcp_config > "$mcp_config_file"
    
    if [ -f "$CURSOR_CONFIG_PATH" ]; then
        # 检查现有配置是否已包含 MCP 设置
        if grep -q "mcp.servers" "$CURSOR_CONFIG_PATH"; then
            echo -e "${YELLOW}⚠️  检测到现有 MCP 配置${NC}"
            echo -e "${BLUE}📄 生成的配置文件: ${mcp_config_file}${NC}"
            echo -e "${YELLOW}🔧 请手动将以下配置合并到 Cursor 配置文件中:${NC}"
            echo
            generate_mcp_config
            echo
        else
            # 合并配置
            echo -e "${YELLOW}🔄 自动合并配置...${NC}"
            
            # 使用 jq 合并 JSON（如果可用）
            if command -v jq > /dev/null 2>&1; then
                jq -s '.[0] * .[1]' "$CURSOR_CONFIG_PATH" "$mcp_config_file" > "${CURSOR_CONFIG_PATH}.tmp"
                mv "${CURSOR_CONFIG_PATH}.tmp" "$CURSOR_CONFIG_PATH"
                echo -e "${GREEN}✅ 配置已自动合并${NC}"
            else
                echo -e "${YELLOW}⚠️  jq 未安装，请手动合并配置${NC}"
                echo -e "${BLUE}📄 生成的配置文件: ${mcp_config_file}${NC}"
                echo -e "${YELLOW}请将以下配置添加到 ${CURSOR_CONFIG_PATH}:${NC}"
                echo
                generate_mcp_config
                echo
            fi
        fi
    else
        # 创建新配置文件
        generate_mcp_config > "$CURSOR_CONFIG_PATH"
        echo -e "${GREEN}✅ 已创建 Cursor 配置文件${NC}"
    fi
}

# 验证配置
verify_config() {
    echo -e "${YELLOW}🔍 验证配置...${NC}"
    
    # 检查配置文件格式
    if command -v jq > /dev/null 2>&1; then
        if jq empty "$CURSOR_CONFIG_PATH" 2>/dev/null; then
            echo -e "${GREEN}✅ 配置文件格式正确${NC}"
        else
            echo -e "${RED}❌ 配置文件格式错误${NC}"
            return 1
        fi
    fi
    
    # 检查可执行文件
    if [ -f "$PROJECT_ROOT/build/index.js" ]; then
        echo -e "${GREEN}✅ MCP 服务器文件存在${NC}"
    else
        echo -e "${RED}❌ MCP 服务器文件不存在${NC}"
        return 1
    fi
}

# 显示后续步骤
show_next_steps() {
    echo
    echo -e "${GREEN}🎉 MCP Server AntD 集成配置完成！${NC}"
    echo
    echo -e "${BLUE}📋 后续步骤:${NC}"
    echo -e "  1. ${YELLOW}完全关闭并重启 Cursor IDE${NC}"
    echo -e "  2. ${YELLOW}在 Cursor 中测试 AI 助手功能${NC}"
    echo -e "  3. ${YELLOW}尝试询问: '帮我生成一个 Ant Design 按钮组件'${NC}"
    echo
    echo -e "${BLUE}📊 可用工具:${NC}"
    echo -e "  • generate_antd_code - 生成组件代码"
    echo -e "  • search_antd_components - 搜索组件"
    echo -e "  • get_antd_documentation - 获取文档"
    echo -e "  • list_antd_templates - 列出模板"
    echo -e "  • get_health_status - 系统健康检查"
    echo -e "  • get_performance_report - 性能报告"
    echo
    echo -e "${BLUE}📖 详细文档: ${PROJECT_ROOT}/docs/cursor-integration-guide.md${NC}"
    echo
    echo -e "${BLUE}🔧 故障排除:${NC}"
    echo -e "  • 检查服务器日志: ${YELLOW}cd ${PROJECT_ROOT} && USE_DATABASE=true node build/index.js${NC}"
    echo -e "  • 验证数据库: ${YELLOW}cd ${PROJECT_ROOT} && npm run db:status${NC}"
    echo -e "  • 配置备份: ${YELLOW}${CURSOR_CONFIG_PATH}.backup.*${NC}"
    echo
}

# 主流程
main() {
    echo -e "${BLUE}🚀 开始自动配置流程...${NC}"
    echo
    
    # 执行检查和配置步骤
    check_build
    echo
    
    check_database
    echo
    
    backup_config
    echo
    
    merge_config
    echo
    
    if verify_config; then
        show_next_steps
    else
        echo -e "${RED}❌ 配置验证失败，请检查配置文件${NC}"
        exit 1
    fi
}

# 运行主流程
main "$@"